package br.com.guarana.business.model;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

/**
 *
 * @author rogerio
 */
@Entity
@Table(name = "segurado")
@NamedQueries({@NamedQuery(name = "Segurado.findSeguradoAll", query = "SELECT r FROM Segurado r"),
               @NamedQuery(name = "Segurado.findSeguradoById", query = "SELECT r FROM Segurado r WHERE r.id = :id")})
@SequenceGenerator(name = "segurado_id_seq", sequenceName = "segurado_id_seq", allocationSize = 1)


public class Segurado implements Serializable {
    private static final long serialVersionUID = 1L;
    
    @Id
    @GeneratedValue(generator = "segurado_id_seq", strategy = GenerationType.AUTO)        
    @Column(name = "id", nullable = false)
    private Integer id;
    
    @ManyToOne(optional = false)    
    @JoinColumn(name = "estipulante_id", referencedColumnName = "id", nullable = false)    
    private Estipulante estipulante;
    
    //A-Ativo | C-Cancelado | S-Suspenso 	
    @Column(name = "situacao", length = 1)
    private String situacao;
    
    @Column(name = "nome", length = 100)
    private String nome;
    
    @Column(name = "data_nascimento")
    @Temporal(TemporalType.DATE)
    private Date dataNascimento;
    
    @Column(name = "peso", length = 8)
    private String peso;
    
    @Column(name = "altura", length = 5)
    private String altura;
    
    @Column(name = "rg_numero", length = 15)
    private String rgNumero;
    
    @Column(name = "rg_orgao_expeditor", length = 5)
    private String rgOrgaoExpeditor;
    
    @Column(name = "rg_uf", length = 2)
    private String rgUf;
    
    @Column(name = "cpf", length = 11)
    private String cpf;
    
    @Column(name = "sexo", length = 1)
    private String sexo;
    
    @Column(name = "estado_civil", length = 1)
    private String estadoCivil;
    
    @Column(name = "profissao", length = 100)
    private String profissao;
    
    @Column(name = "ocupacao", length = 100)
    private String ocupacao;
    
    @Column(name = "inscricao_profissional", length = 100)    
    private String inscricaoProfissional;
    
    @Column(name = "conjuge_nome", length = 100)
    private String conjugeNome;
    
    @Column(name = "conjuge_data_nascimento")
    @Temporal(TemporalType.DATE)
    private Date conjugeDataNascimento;
    
    @Column(name = "conjuge_peso", length = 8)
    private String conjugePeso;
    
    @Column(name = "conjuge_altura", length = 5)
    private String conjugeAltura;
    
    @Column(name = "conjuge_rg_numero", length = 15)
    private String conjugeRgNumero;
    
    @Column(name = "conjuge_rg_orgao_expeditor", length = 5)
    private String conjugeRgOrgaoExpeditor;
    
    @Column(name = "conjuge_rg_uf", length = 2)
    private String conjugeRgUf;
    
    @Column(name = "conjuge_cpf", length = 11)
    private String conjugeCpf;
    
    @Column(name = "conjuge_sexo", length = 1)
    private String conjugeSexo;
    
    @Column(name = "conjuge_estado_civil", length = 1)
    private String conjugeEstadoCivil;
    
    @Column(name = "conjuge_profissao", length = 100)
    private String conjugeProfissao;
    
    @Column(name = "conjuge_ocupacao", length = 100)
    private String conjugeOcupacao;
    
    @Column(name = "conjuge_inscricao_profissional", length = 100)
    private String conjugeInscricaoProfissional;
    
    @Column(name = "banco", length = 3)
    private String banco;
    
    @Column(name = "agencia", length = 5)
    private String agencia;
    
    @Column(name = "conta", length = 20)
    private String conta;
    
    @Column(name = "digito", length = 1)
    private String digito;
    
    @Column(name = "endereco_residencial", length = 100)
    private String enderecoResidencial;
    
    @Column(name = "numero_residencial", length = 10)
    private String numeroResidencial;
    
    @Column(name = "bairro_residencial", length = 50)
    private String bairroResidencial;
    
    @Column(name = "complemento_residencial", length = 50)    
    private String complementoResidencial;
    
    @Column(name = "cep_residencial", length = 9)
    private String cepResidencial;
        
    @ManyToOne
    @JoinColumn(name = "cidade_id_residencial", referencedColumnName = "id")    
    private Cidade cidadeResidencial;
    
    @Column(name = "ddd_telefone_residencial")
    private Integer dddTelefoneResidencial;
    
    @Column(name = "telefone_residencial")
    private Integer telefoneResidencial;
    
    @Column(name = "ddd_celular_residencial")
    private Integer dddCelularResidencial;
    
    @Column(name = "celular_residencial")
    private Integer celularResidencial;
    
    @Column(name = "email_residencial", length = 128)
    private String emailResidencial;
    
    @Column(name = "endereco_comercial", length = 100)
    private String enderecoComercial;
    
    @Column(name = "numero_comercial", length = 10)
    private String numeroComercial;
    
    @Column(name = "bairro_comercial", length = 50)
    private String bairroComercial;
    
    @Column(name = "complemento_comercial", length = 50)
    private String complementoComercial;
    
    @Column(name = "cep_comercial", length = 9)
    private String cepComercial;
    
    @ManyToOne
    @JoinColumn(name = "cidade_id_comercial", referencedColumnName = "id")    
    private Cidade cidadeComercial;
    
    @Column(name = "ddd_telefone_comercial")
    private Integer dddTelefoneComercial;
    
    @Column(name = "telefone_comercial")
    private Integer telefoneComercial;
        
    @Column(name = "email_comercial", length = 128)
    private String emailComercial;
    
    @Column(name = "observacao", length = 4096)
    private String observacao;
    
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "segurado")
    private List<SeguradoApolice> listaDeApolices;
            
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "segurado")
    private List<SeguradoBeneficiario> listaDeBeneficiarios;
    
    @Transient
    private Integer qtdeRegistros;

    public Segurado() {
    }

    public Integer getQtdeRegistros() {
        return qtdeRegistros;
    }

    public void setQtdeRegistros(Integer qtdeRegistros) {
        this.qtdeRegistros = qtdeRegistros;
    }
    
    public Estipulante getEstipulante() {
        return estipulante;
    }

    public void setEstipulante(Estipulante estipulante) {
        this.estipulante = estipulante;
    }
    
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getSituacao() {
        return situacao;
    }

    public void setSituacao(String situacao) {
        this.situacao = situacao;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public Date getDataNascimento() {
        return dataNascimento;
    }

    public void setDataNascimento(Date dataNascimento) {
        this.dataNascimento = dataNascimento;
    }

    public String getPeso() {
        return peso;
    }

    public void setPeso(String peso) {
        this.peso = peso;
    }

    public String getAltura() {
        return altura;
    }

    public void setAltura(String altura) {
        this.altura = altura;
    }

    public String getRgNumero() {
        return rgNumero;
    }

    public void setRgNumero(String rgNumero) {
        this.rgNumero = rgNumero;
    }

    public String getRgOrgaoExpeditor() {
        return rgOrgaoExpeditor;
    }

    public void setRgOrgaoExpeditor(String rgOrgaoExpeditor) {
        this.rgOrgaoExpeditor = rgOrgaoExpeditor;
    }

    public String getRgUf() {
        return rgUf;
    }

    public void setRgUf(String rgUf) {
        this.rgUf = rgUf;
    }

    public String getCpf() {
        return cpf;
    }

    public void setCpf(String cpf) {
        this.cpf = cpf;
    }

    public String getSexo() {
        return sexo;
    }

    public void setSexo(String sexo) {
        this.sexo = sexo;
    }

    public String getEstadoCivil() {
        return estadoCivil;
    }

    public void setEstadoCivil(String estadoCivil) {
        this.estadoCivil = estadoCivil;
    }

    public String getProfissao() {
        return profissao;
    }

    public void setProfissao(String profissao) {
        this.profissao = profissao;
    }

    public String getOcupacao() {
        return ocupacao;
    }

    public void setOcupacao(String ocupacao) {
        this.ocupacao = ocupacao;
    }

    public String getInscricaoProfissional() {
        return inscricaoProfissional;
    }

    public void setInscricaoProfissional(String inscricaoProfissional) {
        this.inscricaoProfissional = inscricaoProfissional;
    }

    public String getConjugeNome() {
        return conjugeNome;
    }

    public void setConjugeNome(String conjugeNome) {
        this.conjugeNome = conjugeNome;
    }

    public Date getConjugeDataNascimento() {
        return conjugeDataNascimento;
    }

    public void setConjugeDataNascimento(Date conjugeDataNascimento) {
        this.conjugeDataNascimento = conjugeDataNascimento;
    }

    public String getConjugePeso() {
        return conjugePeso;
    }

    public void setConjugePeso(String conjugePeso) {
        this.conjugePeso = conjugePeso;
    }

    public String getConjugeAltura() {
        return conjugeAltura;
    }

    public void setConjugeAltura(String conjugeAltura) {
        this.conjugeAltura = conjugeAltura;
    }

    public String getConjugeRgNumero() {
        return conjugeRgNumero;
    }

    public void setConjugeRgNumero(String conjugeRgNumero) {
        this.conjugeRgNumero = conjugeRgNumero;
    }

    public String getConjugeRgOrgaoExpeditor() {
        return conjugeRgOrgaoExpeditor;
    }

    public void setConjugeRgOrgaoExpeditor(String conjugeRgOrgaoExpeditor) {
        this.conjugeRgOrgaoExpeditor = conjugeRgOrgaoExpeditor;
    }

    public String getConjugeRgUf() {
        return conjugeRgUf;
    }

    public void setConjugeRgUf(String conjugeRgUf) {
        this.conjugeRgUf = conjugeRgUf;
    }

    public String getConjugeCpf() {
        return conjugeCpf;
    }

    public void setConjugeCpf(String conjugeCpf) {
        this.conjugeCpf = conjugeCpf;
    }

    public String getConjugeSexo() {
        return conjugeSexo;
    }

    public void setConjugeSexo(String conjugeSexo) {
        this.conjugeSexo = conjugeSexo;
    }

    public String getConjugeEstadoCivil() {
        return conjugeEstadoCivil;
    }

    public void setConjugeEstadoCivil(String conjugeEstadoCivil) {
        this.conjugeEstadoCivil = conjugeEstadoCivil;
    }

    public String getConjugeProfissao() {
        return conjugeProfissao;
    }

    public void setConjugeProfissao(String conjugeProfissao) {
        this.conjugeProfissao = conjugeProfissao;
    }

    public String getConjugeOcupacao() {
        return conjugeOcupacao;
    }

    public void setConjugeOcupacao(String conjugeOcupacao) {
        this.conjugeOcupacao = conjugeOcupacao;
    }

    public String getConjugeInscricaoProfissional() {
        return conjugeInscricaoProfissional;
    }

    public void setConjugeInscricaoProfissional(String conjugeInscricaoProfissional) {
        this.conjugeInscricaoProfissional = conjugeInscricaoProfissional;
    }

    public String getBanco() {
        return banco;
    }

    public void setBanco(String banco) {
        this.banco = banco;
    }

    public String getAgencia() {
        return agencia;
    }

    public void setAgencia(String agencia) {
        this.agencia = agencia;
    }

    public String getConta() {
        return conta;
    }

    public void setConta(String conta) {
        this.conta = conta;
    }

    public String getDigito() {
        return digito;
    }

    public void setDigito(String digito) {
        this.digito = digito;
    }

    public String getEnderecoResidencial() {
        return enderecoResidencial;
    }

    public void setEnderecoResidencial(String enderecoResidencial) {
        this.enderecoResidencial = enderecoResidencial;
    }

    public String getNumeroResidencial() {
        return numeroResidencial;
    }

    public void setNumeroResidencial(String numeroResidencial) {
        this.numeroResidencial = numeroResidencial;
    }

    public String getBairroResidencial() {
        return bairroResidencial;
    }

    public void setBairroResidencial(String bairroResidencial) {
        this.bairroResidencial = bairroResidencial;
    }

    public String getComplementoResidencial() {
        return complementoResidencial;
    }

    public void setComplementoResidencial(String complementoResidencial) {
        this.complementoResidencial = complementoResidencial;
    }

    public String getCepResidencial() {
        return cepResidencial;
    }

    public void setCepResidencial(String cepResidencial) {
        this.cepResidencial = cepResidencial;
    }

    public Cidade getCidadeResidencial() {
        return cidadeResidencial;
    }

    public void setCidadeResidencial(Cidade cidadeResidencial) {
        this.cidadeResidencial = cidadeResidencial;
    }

    public Integer getDddTelefoneResidencial() {
        return dddTelefoneResidencial;
    }

    public void setDddTelefoneResidencial(Integer dddTelefoneResidencial) {
        this.dddTelefoneResidencial = dddTelefoneResidencial;
    }

    public Integer getTelefoneResidencial() {
        return telefoneResidencial;
    }

    public void setTelefoneResidencial(Integer telefoneResidencial) {
        this.telefoneResidencial = telefoneResidencial;
    }

    public Integer getDddCelularResidencial() {
        return dddCelularResidencial;
    }

    public void setDddCelularResidencial(Integer dddCelularResidencial) {
        this.dddCelularResidencial = dddCelularResidencial;
    }

    public Integer getCelularResidencial() {
        return celularResidencial;
    }

    public void setCelularResidencial(Integer celularResidencial) {
        this.celularResidencial = celularResidencial;
    }

    public String getEmailResidencial() {
        return emailResidencial;
    }

    public void setEmailResidencial(String emailResidencial) {
        this.emailResidencial = emailResidencial;
    }

    public String getEnderecoComercial() {
        return enderecoComercial;
    }

    public void setEnderecoComercial(String enderecoComercial) {
        this.enderecoComercial = enderecoComercial;
    }

    public String getNumeroComercial() {
        return numeroComercial;
    }

    public void setNumeroComercial(String numeroComercial) {
        this.numeroComercial = numeroComercial;
    }

    public String getBairroComercial() {
        return bairroComercial;
    }

    public void setBairroComercial(String bairroComercial) {
        this.bairroComercial = bairroComercial;
    }

    public String getComplementoComercial() {
        return complementoComercial;
    }

    public void setComplementoComercial(String complementoComercial) {
        this.complementoComercial = complementoComercial;
    }

    public String getCepComercial() {
        return cepComercial;
    }

    public void setCepComercial(String cepComercial) {
        this.cepComercial = cepComercial;
    }

    public Cidade getCidadeComercial() {
        return cidadeComercial;
    }

    public void setCidadeComercial(Cidade cidadeComercial) {
        this.cidadeComercial = cidadeComercial;
    }

    public Integer getDddTelefoneComercial() {
        return dddTelefoneComercial;
    }

    public void setDddTelefoneComercial(Integer dddTelefoneComercial) {
        this.dddTelefoneComercial = dddTelefoneComercial;
    }

    public Integer getTelefoneComercial() {
        return telefoneComercial;
    }

    public void setTelefoneComercial(Integer telefoneComercial) {
        this.telefoneComercial = telefoneComercial;
    }

    public String getEmailComercial() {
        return emailComercial;
    }

    public void setEmailComercial(String emailComercial) {
        this.emailComercial = emailComercial;
    }

    public String getObservacao() {
        return observacao;
    }

    public void setObservacao(String observacao) {
        this.observacao = observacao;
    }

    public List<SeguradoApolice> getListaDeApolices() {
        return listaDeApolices;
    }

    public void setListaDeApolices(List<SeguradoApolice> listaDeApolices) {
        this.listaDeApolices = listaDeApolices;
    }

    public List<SeguradoBeneficiario> getListaDeBeneficiarios() {
        return listaDeBeneficiarios;
    }

    public void setListaDeBeneficiarios(List<SeguradoBeneficiario> listaDeBeneficiarios) {
        this.listaDeBeneficiarios = listaDeBeneficiarios;
    }


    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Segurado)) {
            return false;
        }
        Segurado other = (Segurado) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "br.com.guarana.business.model.Segurado[ id=" + id + " ]";
    }
    
}
